package com.gustavo.sistema.vendas.venda;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;

import com.gustavo.sistema.vendas.produto.Produto;

public class VendaDAOHibernate implements VendaDAO {

	private Session sessao;

    public Session getSessao() {
            return sessao;
    }

    public void setSessao(Session sessao) {
            this.sessao = sessao;
    }

    @Override
    public void registra(Venda venda) {
            this.sessao.save(venda);

    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Venda> getLista() {
            Criteria lista = sessao.createCriteria(Venda.class);
            return lista.list();
    }

    @Override
    public void excluir(Venda venda) {
            this.sessao.delete(venda);
    }

    @Override
    public boolean existeEstoqueProduto(Produto produto) {

            Produto produtoPesquisado = (Produto) this.sessao.get(Produto.class,
                            produto.getId());

            if (produtoPesquisado != null) {
                    if (produtoPesquisado.getEstoque() > 0) {
                            return true;
                    }
            }

            return false;

    }

    @Override
    public void reduzEstoqueProduto(Produto produto) {
            String hql = "update Produto p set p.estoque =:novoEstoque where p.id =:idProduto";
            Query query = sessao.createQuery(hql);
            query.setInteger("novoEstoque", produto.getEstoque() - 1);
            query.setLong("idProduto", produto.getId());
            query.executeUpdate();

    }
	
}
